package com.tencent.yolov5ncnn;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.Image;
import android.util.Log;

import java.nio.ByteBuffer;

public class MyUtils {
    public static final String TAG = "MyUtils";

    public static Bitmap convertImageToBitmap(Image image) {
        try {
//            // 获取 Image 的宽度和高度
//            int width = image.getWidth();
//            int height = image.getHeight();
//
//            // 创建一个 YUV_420_888 格式的 ImageBuffer
//            Image.Plane[] planes = image.getPlanes();
//            ByteBuffer yBuffer = planes[0].getBuffer(); // Y
//            ByteBuffer uBuffer = planes[1].getBuffer(); // U
//            ByteBuffer vBuffer = planes[2].getBuffer(); // V
//
//            // 获取 YUV 数据
//            int ySize = yBuffer.remaining();
//            int uSize = uBuffer.remaining();
//            int vSize = vBuffer.remaining();
//
//            byte[] yData = new byte[ySize];
//            byte[] uData = new byte[uSize];
//            byte[] vData = new byte[vSize];
//
//            yBuffer.get(yData);
//            uBuffer.get(uData);
//            vBuffer.get(vData);
//
//            // 创建一个 YUV_420_888 格式的 YUV 数据数组
//            byte[] nv21 = new byte[ySize + uSize + vSize];
//            System.arraycopy(yData, 0, nv21, 0, ySize);
//            System.arraycopy(vData, 0, nv21, ySize, vSize);
//            System.arraycopy(uData, 0, nv21, ySize + vSize, uSize);
//
//            // 创建 Bitmap
//            Bitmap bitmap = BitmapFactory.decodeByteArray(nv21, 0, nv21.length,
//                    new BitmapFactory.Options() {
//                        {
//                            inDither = true; // 启用抖动
//                            inPreferredConfig = Bitmap.Config.ARGB_8888; // 设置配置为 ARGB_8888
//                        }
//                    });
//
////        // 释放 Image
////        image.close();


            // 获取 Image 的宽度和高度
            int width = image.getWidth();
            int height = image.getHeight();
            int format = image.getFormat(); //YUV_420_888
            // 获取单个平面的数据
            Image.Plane[] planes = image.getPlanes();
            ByteBuffer yuvBuffer = planes[0].getBuffer(); // 单个平面包含 YUV 数据

            // 获取 YUV 数据
            int yuvSize = yuvBuffer.remaining();

            byte[] yuvData = new byte[yuvSize];
            yuvBuffer.get(yuvData);

            // 创建一个 NV21 格式的 YUV 数据数组
            byte[] nv21 = yuvData; // 已经是 NV21 格式

            // 创建 Bitmap
            Bitmap bitmap = BitmapFactory.decodeByteArray(nv21, 0, nv21.length,
                    new BitmapFactory.Options() {
                        {
                            inDither = true; // 启用抖动
                            inPreferredConfig = Bitmap.Config.ARGB_8888; // 设置配置为 ARGB_8888
                        }
                    });

            // 旋转
            Matrix m = new Matrix();
//            m.postScale(-1, 1); // 镜像水平翻转
            m.postRotate(90);
            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);



            return bitmap;

        } catch (Exception e) {
            Log.e(TAG, "Error ", e);

        }

        return null;

    }
}
